package design.mode.prototype;

import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 我们只需要在系统 A 中，记录当前数据的版本 Va 对应的更新时间 Ta，
 * 从数据库中捞出更新时间大于 Ta 的所有搜索关键词，
 * 也就是找出 Va 版本与最新版本数据的“差集”，
 * 然后针对差集中的每个关键词进行处理。如果它已经在散列表中存在了，
 * 我们就更新相应的搜索次数、更新时间等信息；如果它在散列表中不存在，
 * 我们就将它插入到散列表中。
 * @author ZhongMingde on 2021/10/28
 */

public class Demo {
    private ConcurrentHashMap<String,SearchWord> currentKeywords = new ConcurrentHashMap<>();

    private long lastUpdateTime = 1; // 版本号

    public void refresh(){
        // 从数据库中取出更新时间>lastUpdateTime的数据，放入到currentKeywords中
        List<SearchWord> toBeUpdatedSearchWords = getSearchWords(lastUpdateTime);
        long maxNewUpdatedTime = lastUpdateTime;
        for (SearchWord searchWord : toBeUpdatedSearchWords) {
            if (searchWord.getLastUpdateTime() > maxNewUpdatedTime){
                maxNewUpdatedTime = searchWord.getLastUpdateTime();
            }
            if (currentKeywords.containsKey(searchWord.getKeyWord())){
                currentKeywords.replace(searchWord.getKeyWord(), searchWord);
            }else {
                currentKeywords.put(searchWord.getKeyWord(), searchWord);
            }
        }
        lastUpdateTime = maxNewUpdatedTime;
    }


    private List<SearchWord> getSearchWords(long lastUpdateTime){
        return Collections.emptyList();
    }

    class SearchWord{
        private long lastUpdateTime;

        private  String keyWord;

        public long getLastUpdateTime() {
            return lastUpdateTime;
        }

        public void setLastUpdateTime(long lastUpdateTime) {
            this.lastUpdateTime = lastUpdateTime;
        }

        public String getKeyWord() {
            return keyWord;
        }

        public void setKeyWord(String keyWord) {
            this.keyWord = keyWord;
        }
    }
}
